import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.sql.*;

class input_Anggota extends JInternalFrame {
  JLabel no_anggota = new JLabel();
  JLabel nama = new JLabel();
  JLabel alamat = new JLabel();
  JLabel no_ktp = new JLabel();
  JLabel tgl_lahir = new JLabel();
  JLabel tmp_lahir = new JLabel();
  JLabel kota = new JLabel();
  JLabel kode_pos = new JLabel();
  JLabel tlp = new JLabel();
  JTextField data_no_anggota = new JTextField();
  JTextField data_nama = new JTextField();
  JTextField data_no_ktp = new JTextField();
  JTextField data_tmp_lahir = new JTextField();
  JTextField data_alamat = new JTextField();
  JComboBox data_tgl_lahir = new JComboBox();
  JComboBox data_bln_lahir = new JComboBox();
  JComboBox data_thn_lahir = new JComboBox();
  JTextField data_kota = new JTextField();
  JTextField data_kode_pos = new JTextField();
  JTextField data_no_tlp = new JTextField();
  JButton tombol_simpan = new JButton();
  JButton tombol_update = new JButton();
  JPanel panel_data = new JPanel();
  JPanel panel_tombol = new JPanel();
  JButton tombol_edit = new JButton();
  JButton tombol_tambah = new JButton();
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();

  public input_Anggota() {
    super(".:: Form Pengisian Data Anggota ::.");
    tampilanGUI();
    listener_tombol();
    listener_komponen_teks();
    komponen_tidak_aktif();
  }

  void tampilanGUI() {
    no_anggota.setHorizontalAlignment(SwingConstants.RIGHT);
    no_anggota.setText("No. Anggota :");
    nama.setHorizontalAlignment(SwingConstants.RIGHT);
    nama.setText("Nama Anggota :");
    no_ktp.setHorizontalAlignment(SwingConstants.RIGHT);
    no_ktp.setText("No. KTP :");
    tmp_lahir.setHorizontalAlignment(SwingConstants.RIGHT);
    tmp_lahir.setText("Tempat Lahir :");
    tgl_lahir.setHorizontalAlignment(SwingConstants.RIGHT);
    tgl_lahir.setText("Tanggal Lahir :");
    alamat.setHorizontalAlignment(SwingConstants.RIGHT);
    alamat.setText("Alamat :");
    kota.setHorizontalAlignment(SwingConstants.RIGHT);
    kota.setText("Kota :");
    kode_pos.setHorizontalAlignment(SwingConstants.RIGHT);
    kode_pos.setText("Kode Pos :");
    tlp.setHorizontalAlignment(SwingConstants.RIGHT);
    tlp.setText("No. Tlp :");

    no_anggota.setBounds(new Rectangle(0, 10, 100, 15));
    nama.setBounds(new Rectangle(0, 40, 100, 15));
    no_ktp.setBounds(new Rectangle(0, 70, 100, 15));
    tmp_lahir.setBounds(new Rectangle(0, 100, 100, 15));
    tgl_lahir.setBounds(new Rectangle(0, 130, 100, 15));
    alamat.setBounds(new Rectangle(0, 160, 100, 15));
    kota.setBounds(new Rectangle(0, 190, 100, 15));
    kode_pos.setBounds(new Rectangle(0, 220, 100, 15));
    tlp.setBounds(new Rectangle(0, 250, 100, 15));
    data_no_anggota.setEnabled(false);
    data_no_anggota.setBounds(new Rectangle(105, 10, 99, 20));
    data_nama.setBounds(new Rectangle(105, 40, 251, 20));
    data_no_ktp.setBounds(new Rectangle(105, 70, 154, 20));
    data_tmp_lahir.setBounds(new Rectangle(105, 100, 154, 20));
    data_alamat.setBounds(new Rectangle(105, 160, 292, 20));
    data_tgl_lahir.setBounds(new Rectangle(105, 130, 40, 20));
    data_bln_lahir.setBounds(new Rectangle(157, 130, 90, 20));
    data_thn_lahir.setBounds(new Rectangle(254, 130, 55, 20));
    data_kota.setBounds(new Rectangle(105, 190, 154, 20));
    data_kode_pos.setBounds(new Rectangle(105, 220, 154, 20));
    data_no_tlp.setBounds(new Rectangle(105, 250, 154, 20));
    tombol_simpan.setBounds(new Rectangle(15, 295, 73, 25));
    tombol_simpan.setText("Simpan");
    tombol_update.setBounds(new Rectangle(98, 295, 73, 25));
    tombol_update.setText("Update");
    tombol_edit.setText("Edit Data");
    tombol_tambah.setText("Tambah Baru");

    for (int i = 1; i <= 31; i++) {
      data_tgl_lahir.addItem(Integer.toString(i));
    }
    data_bln_lahir.addItem("Januari");
    data_bln_lahir.addItem("Februari");
    data_bln_lahir.addItem("Maret");
    data_bln_lahir.addItem("April");
    data_bln_lahir.addItem("Mei");
    data_bln_lahir.addItem("Juni");
    data_bln_lahir.addItem("Juli");
    data_bln_lahir.addItem("Agustus");
    data_bln_lahir.addItem("September");
    data_bln_lahir.addItem("Oktober");
    data_bln_lahir.addItem("November");
    data_bln_lahir.addItem("Desember");
    for (int i = 1930; i <= (Calendar.getInstance().get(Calendar.YEAR)) - 5; i++) {
      data_thn_lahir.addItem(Integer.toString(i));
    }

    panel_data.setLayout(null);

    jLabel1.setText(
        "Create by Midiyaqa (Group 2)");
    jLabel2.setText(
        "* (Apabila Tidak Memiliki KTP, masukkan dengan angka 0 (nol))");
    jLabel2.setBounds(new Rectangle(270, 72, 350, 15));

    panel_data.setBorder(BorderFactory.createRaisedBevelBorder());
    panel_tombol.setLayout(new FlowLayout(FlowLayout.LEFT));
    panel_data.add(no_anggota);
    panel_data.add(nama);
    panel_data.add(no_ktp);
    panel_data.add(tmp_lahir);
    panel_data.add(tgl_lahir);
    panel_data.add(alamat);
    panel_data.add(kota);
    panel_data.add(kode_pos);
    panel_data.add(tlp);
    panel_data.add(data_no_anggota);
    panel_data.add(data_nama);
    panel_data.add(data_no_ktp);
    panel_data.add(data_tmp_lahir);
    panel_data.add(data_alamat);
    panel_data.add(data_tgl_lahir);
    panel_data.add(data_bln_lahir);
    panel_data.add(data_thn_lahir);
    panel_data.add(data_kota);
    panel_data.add(data_no_tlp);
    panel_data.add(data_kode_pos);
    panel_data.add(tombol_simpan);
    panel_data.add(tombol_update);
    panel_data.add(jLabel2, null);
    this.getContentPane().add(jLabel1, BorderLayout.SOUTH);
    this.getContentPane().add(panel_tombol, BorderLayout.NORTH);
    panel_tombol.add(tombol_tambah);
    panel_tombol.add(tombol_edit);
    this.getContentPane().add(panel_data, BorderLayout.CENTER);
  }

  public void listener_komponen_teks() {
    data_no_anggota.setDocument(new saring_karakter().getOnlyDigit());
    data_no_anggota.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (data_no_anggota.getText().length() >= 6) {
          data_no_anggota.setText(data_no_anggota.getText().substring(0, 6));
          Connection kon = new koneksi_database().koneksiDatabase();
          boolean ada_data = false;
          try {
            String sql = "Select * from data_anggota where no_anggota = '" +
                         data_no_anggota.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
              data_nama.setText(rs.getString("nama"));
              data_no_ktp.setText(rs.getString("no_ktp"));
              data_tmp_lahir.setText(rs.getString("tmp_lahir"));

              StringTokenizer token = new StringTokenizer(rs.getString(
                  "tgl_lahir"));
              data_tgl_lahir.setSelectedItem(token.nextToken());
              data_bln_lahir.setSelectedItem(token.nextToken());
              data_thn_lahir.setSelectedItem(token.nextToken());

              data_alamat.setText(rs.getString("alamat"));
              data_kota.setText(rs.getString("kota"));
              data_kode_pos.setText(rs.getString("kode_pos"));
              data_no_tlp.setText(rs.getString("no_tlp"));

              ada_data = true;
              komponen_aktif();
              data_nama.requestFocus();
              data_no_anggota.setEnabled(false);
              tombol_simpan.setEnabled(false);
            }
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
          if (ada_data == false) {
            hapus_teks_komponen();
            komponen_tidak_aktif();
            JOptionPane.showMessageDialog(null, "Data Tidak Ditemukan");
            data_no_anggota.setEnabled(true);
            data_no_anggota.requestFocus();
          }
        }
      }
    });

    data_nama.setDocument(new saring_karakter().getOnlyLetter());
    data_nama.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_nama.getText().equalsIgnoreCase("")) {
          }
          else {
            data_no_ktp.requestFocus();
          }
        }
      }
    });

    data_no_ktp.setDocument(new saring_karakter().getOnlyDigit());
    data_no_ktp.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_no_ktp.getText().equalsIgnoreCase("")) {
          }
          else {
            data_tmp_lahir.requestFocus();
          }
        }
      }
    });

    data_tmp_lahir.setDocument(new saring_karakter().getOnlyLetter());
    data_tmp_lahir.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_tmp_lahir.getText().equalsIgnoreCase("")) {
          }
          else {
            data_tgl_lahir.requestFocus();
          }
        }
      }
    });

    data_tgl_lahir.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          data_bln_lahir.requestFocus();
        }
      }
    });

    data_bln_lahir.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          data_thn_lahir.requestFocus();
        }
      }
    });

    data_thn_lahir.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          data_alamat.requestFocus();
        }
      }
    });

    data_alamat.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_alamat.getText().equalsIgnoreCase("")) {
          }
          else {
            data_kota.requestFocus();
          }
        }
      }
    });

    data_kota.setDocument(new saring_karakter().getOnlyLetter());
    data_kota.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_kota.getText().equalsIgnoreCase("")) {
          }
          else {
            data_kode_pos.requestFocus();
          }
        }
      }
    });

    data_kode_pos.setDocument(new saring_karakter().getOnlyDigit());
    data_kode_pos.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_kode_pos.getText().equalsIgnoreCase("")) {
          }
          else {
            data_no_tlp.requestFocus();
          }
        }
      }
    });

    data_no_tlp.setDocument(new saring_karakter().getOnlyDigit());
    data_no_tlp.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_no_tlp.getText().equalsIgnoreCase("")) {
          }
          else {
            if (tombol_simpan.isEnabled() == true) {
              tombol_simpan.requestFocus();
            }
            else {
              tombol_update.requestFocus();
            }
          }
        }
      }
    });
  }

  public void listener_tombol() {
    tombol_tambah.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        komponen_aktif();
        hapus_teks_komponen();
        data_no_anggota.setEnabled(false);
        tombol_update.setEnabled(false);
        data_nama.requestFocus();
        boolean ada_anggota = false;
        Connection kon = new koneksi_database().koneksiDatabase();
        try {
          String sql = "select max(no_anggota) as no from data_anggota";
          Statement stat = kon.createStatement();
          ResultSet set = stat.executeQuery(sql);
          while (set.next()) {
            String nomor = set.getString("no");
            int no_angt = Integer.parseInt(nomor) + 1;
            String dt_no_anggota = Integer.toString(no_angt);
            int panjang = dt_no_anggota.length();
            for (int i = 1; i <= (6 - panjang); i++) {
              dt_no_anggota = "0" + dt_no_anggota;
            }
            data_no_anggota.setText(dt_no_anggota);
            ada_anggota = true;
          }
        }
        catch (Exception es) {}
        if (ada_anggota == false) {
          data_no_anggota.setText("000001");
        }
      }
    });

    tombol_edit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        komponen_tidak_aktif();
        hapus_teks_komponen();
        data_no_anggota.setEnabled(true);
        data_no_anggota.requestFocus();
      }
    });

    tombol_simpan.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int nilai_pesan = konfirmasi_data("Penyimpanan");
        if (nilai_pesan == 0) {

          Connection kon = new koneksi_database().koneksiDatabase();
          try {
            String sql = "INSERT INTO data_anggota values (?,?,?,?,?,?,?,?,?)";
            PreparedStatement st = kon.prepareStatement(sql);
            try {
              st.setString(1, data_no_anggota.getText());
              st.setString(2, data_nama.getText());
              st.setString(3, data_no_ktp.getText());
              st.setString(4, data_tmp_lahir.getText());

              String tgl_lhr = String.valueOf(data_tgl_lahir.getSelectedItem());
              String bln_lhr = String.valueOf(data_bln_lahir.getSelectedItem());
              String thn_lhr = String.valueOf(data_thn_lahir.getSelectedItem());
              String tanggal_lahir = tgl_lhr + " " + bln_lhr + " " + thn_lhr;

              st.setString(5, tanggal_lahir);
              st.setString(6, data_alamat.getText());
              st.setString(7, data_kota.getText());
              st.setString(8, data_kode_pos.getText());
              st.setString(9, data_no_tlp.getText());
              st.executeUpdate();

              komponen_tidak_aktif();
              hapus_teks_komponen();
              tombol_tambah.requestFocus();
            }
            // Proses penyimpanan Gagal
            catch (SQLException se) {
              System.out.println(se);
              JOptionPane.showMessageDialog(null,
                  "Kode yang Anda masukkan telah ada sebelumnya \nGagal disimpan.. Coba Lagi");
            }
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
        }
      }
    });

    tombol_update.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int nilai_pesan = konfirmasi_data("Editing (Perubahan)");
        if (nilai_pesan == 0) {

          Connection kon = new koneksi_database().koneksiDatabase();
          try {
            String sql = "UPDATE data_anggota SET nama=?, no_ktp=?," +
                         " tmp_lahir=?, tgl_lahir=?, alamat=?, " +
                         "kota=?, kode_pos=?, no_tlp=? WHERE no_anggota = '" +
                         data_no_anggota.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            try {
              st.setString(1, data_nama.getText());
              st.setString(2, data_no_ktp.getText());
              st.setString(3, data_tmp_lahir.getText());

              String tgl_lhr = String.valueOf(data_tgl_lahir.getSelectedItem());
              String bln_lhr = String.valueOf(data_bln_lahir.getSelectedItem());
              String thn_lhr = String.valueOf(data_thn_lahir.getSelectedItem());
              String tanggal_lahir = tgl_lhr + " " + bln_lhr + " " + thn_lhr;

              st.setString(4, tanggal_lahir);
              st.setString(5, data_alamat.getText());
              st.setString(6, data_kota.getText());
              st.setString(7, data_kode_pos.getText());
              st.setString(8, data_no_tlp.getText());
              st.executeUpdate();

              komponen_tidak_aktif();
              hapus_teks_komponen();
              tombol_edit.requestFocus();
            }
            // Proses penyimpanan Gagal
            catch (SQLException se) {}
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
        }
      }
    });
  }

  public int konfirmasi_data(String action) {
    String st_anggota = data_no_anggota.getText();
    String st_nama = data_nama.getText();
    String st_no_ktp = data_no_ktp.getText();
    String st_tmp_lahir = data_tmp_lahir.getText();

    String tgl_lhr = String.valueOf(data_tgl_lahir.getSelectedItem());
    String bln_lhr = String.valueOf(data_bln_lahir.getSelectedItem());
    String thn_lhr = String.valueOf(data_thn_lahir.getSelectedItem());
    String st_tanggal_lahir = tgl_lhr + " " + bln_lhr + " " + thn_lhr;

    String st_alamat = data_alamat.getText();
    String st_kota = data_kota.getText();
    String st_kode_pos = data_kode_pos.getText();
    String st_no_tlp = data_no_tlp.getText();

    String konfirmData = "Anda Yakin ingin melakukan proses " + action +
                         " dengan Data sebagai Berikut : \n\nNo. Anggota : " +
                         st_anggota + "\nNama : " + st_nama + "\nNo. KTP : " +
                         st_no_ktp + "\nTempat Lahir : " + st_tmp_lahir +
                         "\nTgl. Lahir : " + st_tanggal_lahir + "\nAlamat : " +
                         st_alamat + "\nKota : " + st_kota + "\nKode Pos : " +
                         st_kode_pos + "\nNo. Tlp : " + st_no_tlp +
                         "\n\nJika Anda yakin, tekan YES !!!";
    int pesan = JOptionPane.showConfirmDialog(null, konfirmData,
                                              "Konfirmasi Data Proses " +
                                              action, JOptionPane.YES_NO_OPTION);
    return pesan;
  }

  public void komponen_aktif() {
    data_no_anggota.setEnabled(true);
    data_nama.setEnabled(true);
    data_no_ktp.setEnabled(true);
    data_tmp_lahir.setEnabled(true);
    data_alamat.setEnabled(true);
    data_tgl_lahir.setEnabled(true);
    data_bln_lahir.setEnabled(true);
    data_thn_lahir.setEnabled(true);
    data_kota.setEnabled(true);
    data_kode_pos.setEnabled(true);
    data_no_tlp.setEnabled(true);
    tombol_simpan.setEnabled(true);
    tombol_update.setEnabled(true);
  }

  public void komponen_tidak_aktif() {
    data_no_anggota.setEnabled(false);
    data_nama.setEnabled(false);
    data_no_ktp.setEnabled(false);
    data_tmp_lahir.setEnabled(false);
    data_alamat.setEnabled(false);
    data_tgl_lahir.setEnabled(false);
    data_bln_lahir.setEnabled(false);
    data_thn_lahir.setEnabled(false);
    data_kota.setEnabled(false);
    data_kode_pos.setEnabled(false);
    data_no_tlp.setEnabled(false);
    tombol_simpan.setEnabled(false);
    tombol_update.setEnabled(false);
  }

  public void hapus_teks_komponen() {
    data_no_anggota.setText("");
    data_nama.setText("");
    data_no_ktp.setText("");
    data_tmp_lahir.setText("");
    data_alamat.setText("");
    data_tgl_lahir.setSelectedIndex(0);
    data_bln_lahir.setSelectedIndex(0);
    data_thn_lahir.setSelectedIndex(0);
    data_kota.setText("");
    data_kode_pos.setText("");
    data_no_tlp.setText("");
  }
}